﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.DL.DALC.SAPC.Proxy;
using System.Configuration;
using DECOR.BL.BE;
using System.Data;

namespace DECOR.DL.DALC.SAPC
{
    public class ParametroDALC : IParametroDALC
    {
        
       public static ParametroDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(ParametroDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ParametroDALC();
                    }
                }
            }
            return _instance;
        }

        private ParametroDALC() { }
        private static volatile ParametroDALC _instance = null;

        #region Mejoras Web v2

        public void get_Param_PFact(ref List<GenericBE> lstDenom, ref List<GenericBE> lstMoneda,
            ref List<GenericBE> lstMotivoBloq, ref List<GenericBE> lstClaseDoc, ref List<GenericBE> lstRFACT,
            ref List<GenericBE> lstSTATU, ref List<GenericBE> lstTFPLU,ref List<GenericBE> lstCPag)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            DD07VTable T_Rfact=new DD07VTable();
            DD07VTable T_Statu = new DD07VTable();
            TCURTTable T_Tcurt = new TCURTTable();
            TFPLUTable T_Tfplu = new TFPLUTable();
            TVFKTTable T_Tvfkt = new TVFKTTable();
            TVFSTTable T_Tvfst = new TVFSTTable();
            TVTBTTable T_Tvtbt = new TVTBTTable();
            T052UTable T_Cpag = new T052UTable();

            p.Zweb_Get_Param_Pfact(ref T_Cpag, ref  T_Rfact, ref  T_Statu, ref  T_Tcurt, ref  T_Tfplu, ref  T_Tvfkt, ref  T_Tvfst, ref T_Tvtbt);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            GenericBE blanco = new GenericBE();
            blanco.Codigo = " "; 
            blanco.Descripcion = " ";

            lstRFACT.Add(blanco);
            foreach(DD07V item in T_Rfact )
            {   GenericBE i = new GenericBE();
                i.Codigo = item.Domvalue_L;
                i.Descripcion = item.Domvalue_L + charSep + item.Ddtext;
                lstRFACT.Add(i);
            }

            lstSTATU.Add(blanco);
           
            foreach(DD07V item in T_Statu )
            {

                    GenericBE i = new GenericBE();
                    i.Codigo = item.Domvalue_L;
                    i.Descripcion = item.Domvalue_L + charSep + item.Ddtext;
                    lstSTATU.Add(i);

            }

            lstMoneda.Add(blanco);
            foreach(TCURT item in T_Tcurt )
            {   GenericBE i = new GenericBE();
                i.Codigo = item.Waers;
                i.Descripcion = item.Waers + charSep + item.Ltext;
                lstMoneda.Add(i);
            }

            lstTFPLU.Add(blanco);
            foreach(TFPLU item in T_Tfplu )
            {   GenericBE i = new GenericBE();
                i.Codigo = item.Fpttp;
                i.Descripcion = item.Fpttp + charSep + item.Ttbez;
                lstTFPLU.Add(i);
            }

            lstClaseDoc.Add(blanco);
            foreach (TVFKT item in T_Tvfkt)
            {
                GenericBE i = new GenericBE();
                i.Codigo = item.Fkart;
                i.Descripcion = item.Fkart + charSep + item.Vtext;
                lstClaseDoc.Add(i);
            }

            lstMotivoBloq.Add(blanco);
            foreach(TVFST item in T_Tvfst )
            {   GenericBE i = new GenericBE();
                i.Codigo = item.Faksp;
                i.Descripcion = item.Faksp + charSep + item.Vtext;
                lstMotivoBloq.Add(i);
            }

            lstDenom.Add(blanco);
            foreach (TVTBT item in T_Tvtbt)
            {
                if (item.Tetbe == "Z001" || item.Tetbe == "Z002")
                {
                    GenericBE i = new GenericBE();
                    i.Codigo = item.Tetbe;
                    i.Descripcion = item.Tetbe + charSep + item.Tebez;
                    lstDenom.Add(i);
                }
            }


            lstCPag.Add(blanco);
            foreach (T052U item in T_Cpag)
            {
                GenericBE i = new GenericBE();
                i.Codigo = item.Zterm;
                i.Descripcion = item.Zterm + charSep + item.Text1;
                lstCPag.Add(i);
            }    
        }


        public List<StockBE> getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
            string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            ZWEB_STOCKTable lt_lotes = new ZWEB_STOCKTable();
            p.Zweb_Data_Lotes(pLote, pAlmacen, pMatnr, pPosNr, pNumPedido,
                pOrgVtas, pCanalDist, pCentro, pCant, ref lt_lotes);
            // ( P_Charg,  P_Lgort,  P_Matnr,  P_Posnr,  P_Vbeln,  
            //P_Vkorg,  P_Vtweg,  P_Werks,  P_Zmeng, T_Lotes);
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            List<StockBE> lstStockBE = new List<StockBE>();
            StockBE objStockBE;

            //string charStockMax = ParametroDALC.getParamValueStatic("stockMayor");

            foreach (ZWEB_STOCK ls_lotes in lt_lotes)
            {
                if (ls_lotes.Stock_Di > 9999999998)
                {
                    continue;
                }
   
                objStockBE = new StockBE();

                objStockBE.CodMaterial = ls_lotes.Matnr;
                objStockBE.DescMaterial = ls_lotes.Matnom;
                objStockBE.CodCentro = ls_lotes.Werks;
                objStockBE.DescCentro = ls_lotes.Wernom;
                objStockBE.CodAlmacen = ls_lotes.Lgort;
                objStockBE.DescAlmacen = !ls_lotes.Lgort.Equals(string.Empty) ? ls_lotes.Lgort + " (" + ls_lotes.Lgonom + ")" : ls_lotes.Lgort;
                objStockBE.CodLote = ls_lotes.Charg;
                objStockBE.StockDisponible = ls_lotes.Stock_Di;
                objStockBE.ValorCaracteristica = ls_lotes.Atwrt; //rgutierrez 29.12.2011
                //if (ls_lotes.Stock_Di == 0)
                //{
                //    objStockBE.sStockDisponible = "0";
                //}
                //else
                //{
                //    objStockBE.sStockDisponible = (ls_lotes.Stock_Di > Convert.ToDecimal(charStockMax)) ? "> " + charStockMax : ls_lotes.Stock_Di.ToString();
                //}

                lstStockBE.Add(objStockBE);
            }

            return lstStockBE;
        }

        public void getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
                                string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist,
                                ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote, ref string pCentroOp,
                                ref string pAlmacenOp, ref string pLoteOp)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            ZWEB_STOCKTable lt_lotes = new ZWEB_STOCKTable();

            p.Zweb_Data_Lotes(string.Empty, string.Empty, pMatnr, pPosNr, pNumPedido,
                pOrgVtas, pCanalDist, string.Empty, pCant, ref lt_lotes);
            //p.Zweb_Data_Lotes(pLote, pAlmacen, pMatnr, pPosNr, pNumPedido,
            //    pOrgVtas, pCanalDist, pCentro, pCant, ref lt_lotes);
            // ( P_Charg,  P_Lgort,  P_Matnr,  P_Posnr,  P_Vbeln,  
            //P_Vkorg,  P_Vtweg,  P_Werks,  P_Zmeng, T_Lotes);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            GenericBE objItem, objAux;
            List<LoteBE> lst_lote = new List<LoteBE>();
            //mtejada: ordeno de menor a mayor

            for (int i = 0; i <= lt_lotes.Count - 1; i++)
            {
                LoteBE lote = new LoteBE();
                lote.MATNR = lt_lotes[i].Matnr;
                lote.MATNOM = lt_lotes[i].Matnom;
                lote.WERKS = lt_lotes[i].Werks;
                lote.WERNOM = lt_lotes[i].Wernom;
                lote.LGORT = lt_lotes[i].Lgort;
                lote.LGONOM = lt_lotes[i].Lgonom;
                lote.CHARG = lt_lotes[i].Charg;
                lote.STOCK_LU = lt_lotes[i].Stock_Lu;
                lote.STOCK_PC = lt_lotes[i].Stock_Pc;
                lote.STOCK_EC = lt_lotes[i].Stock_Ec;
                lote.STOCK_DI = lt_lotes[i].Stock_Di;
                lote.STOCK_CU = lt_lotes[i].Stock_Cu;

                lst_lote.Add(lote);
            }
            lst_lote = lst_lote.OrderBy(x => x.STOCK_DI).ToList();
            //busco el valor Optimo
            for (int i = 0; i <= lst_lote.Count - 1; i++)
            {
                if (lst_lote[i].STOCK_DI >= pCant)
                {
                    pCentroOp = lst_lote[i].WERKS;
                    pAlmacenOp = lst_lote[i].LGORT;
                    pLoteOp = lst_lote[i].CHARG;
                    break;
                }
            }
            //-------------------------------------------------------------
            foreach (ZWEB_STOCK ls_lotes in lt_lotes)
            {

                //---- Divido el resultado en Centro / Almacén / Lote
                objAux = lstCentro.Find(X => X.Codigo == ls_lotes.Werks);
                if (objAux == null)
                {
                    objItem = new GenericBE();
                    objItem.Codigo = ls_lotes.Werks;
                    objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Wernom;
                    lstCentro.Add(objItem);
                }

                objAux = lstAlmacen.Find(X => X.Codigo == ls_lotes.Lgort);
                if (objAux == null)
                {
                    objItem = new GenericBE();
                    objItem.Codigo = ls_lotes.Lgort;
                    objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Lgonom;
                    lstAlmacen.Add(objItem);
                }

                objItem = new GenericBE();
                objItem.Codigo = ls_lotes.Charg;
                objItem.Descripcion = objItem.Codigo + charSep + ls_lotes.Wernom + charSep + ls_lotes.Stock_Di.ToString();
                lstLote.Add(objItem);
            }
        }

        public void getDataDDL(ref List<GenericBE> lstZipCodes, ref List<GenericBE> lstAsesores,
            ref List<GenericBE> lstBloEnt, ref List<GenericBE> lstBloFac, ref List<GenericBE> lstCondExp,
            ref List<GenericBE> lstGrpCond, ref List<GenericBE> lstGrpVend, ref List<GenericBE> lstMotPed,
            ref List<GenericBE> lstOfVtas, ref List<GenericBE> lstSectores, ref List<GenericBE> lstTipoDoc, ref List<GenericBE> lstTipoVisita)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            //------------------------------------------------------------------
       
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            PA0001Table lt_asesores = new PA0001Table();
            TVLSTTable lt_bloent = new TVLSTTable();
            TVFSTTable lt_blofac = new TVFSTTable();
            TVSBTTable lt_condexp = new TVSBTTable();
            TVKGGTTable lt_grpcond = new TVKGGTTable();
            TVGRTTable lt_grpvend = new TVGRTTable();
            TVAUTTable lt_motped = new TVAUTTable();
            TVKBTTable lt_oficinas = new TVKBTTable();
            TSPATTable lt_sectores = new TSPATTable();
            TVAKTTable lt_tipodoc = new TVAKTTable();
            ZTSD_ZIPCODESTable lt_zcodes = new ZTSD_ZIPCODESTable();
            ZWEB_COMBOTable lt_Tipovisita = new ZWEB_COMBOTable();
            p.Zweb_Data_Ddl(ref lt_asesores, ref lt_bloent, ref lt_blofac, ref lt_condexp, ref lt_grpcond,
                            ref lt_grpvend, ref lt_motped, ref lt_oficinas, ref lt_sectores, ref lt_tipodoc,
                            ref lt_Tipovisita, ref lt_zcodes);
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            //--------------------------------------
            GenericBE objBlank= new GenericBE();
            objBlank.Codigo = string.Empty; objBlank.Descripcion = string.Empty;
            GenericBE objRetval;
            
            //--- Zip Codes
            //List<GenericBE> lstZipCodes = new List<GenericBE>();
            lstZipCodes.Add(objBlank);
            foreach (ZTSD_ZIPCODES ls_zcodes in lt_zcodes)
            {
                objRetval = new GenericBE();
                if (ls_zcodes.Zcode.Length>10)
                    objRetval.Codigo = ls_zcodes.Zcode.Substring(0,10);
                else
                    objRetval.Codigo = ls_zcodes.Zcode;
                objRetval.Descripcion = ls_zcodes.Zdesc;
                lstZipCodes.Add(objRetval);
            }

            //--- Lista de asesores comerciales:
            //List<GenericBE> lstAsesores = new List<GenericBE>();
            lstAsesores.Add(objBlank);
            foreach (PA0001 ls_asesores in lt_asesores)
            {
                if (!ls_asesores.Ename.Equals(string.Empty))
                {
                    objRetval = new GenericBE();
                    objRetval.Codigo = ls_asesores.Pernr;
                    objRetval.Descripcion = ls_asesores.Ename;
                    lstAsesores.Add(objRetval);
                }
            }

            //--- Bloqueos de entrega:
            //List<GenericBE> lstBloEnt = new List<GenericBE>();
            lstBloEnt.Add(objBlank);
            foreach (TVLST ls_bloent in lt_bloent)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_bloent.Lifsp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_bloent.Vtext;
                lstBloEnt.Add(objRetval);
            }
            
            //--- Bloqueos de factura:
            //List<GenericBE> lstBloFac = new List<GenericBE>();
            lstBloFac.Add(objBlank);
            foreach (TVFST ls_blofac in lt_blofac)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_blofac.Faksp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_blofac.Vtext;
                lstBloFac.Add(objRetval);
            }

            //--- Condición de expedición / prioridad de entrega
            //List<GenericBE> lstCondExp = new List<GenericBE>();
            lstCondExp.Add(objBlank);
            foreach (TVSBT ls_condexp in lt_condexp)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_condexp.Vsbed;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_condexp.Vtext;
                lstCondExp.Add(objRetval);
            }

            //--- Grupo de condiciones:
            //List<GenericBE> lstGrpCond = new List<GenericBE>();
            lstGrpCond.Add(objBlank);
            foreach (TVKGGT ls_grpcond in lt_grpcond)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_grpcond.Kdkgr;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_grpcond.Vtext;
                lstGrpCond.Add(objRetval);
            }
            
            //--- Grupo de vendedores {Revisar si queda o se va}
            //List<GenericBE> lstGrpVend = new List<GenericBE>();
            lstGrpVend.Add(objBlank);
            foreach (TVGRT ls_grpvend in lt_grpvend)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_grpvend.Vkgrp;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_grpvend.Bezei;
                lstGrpVend.Add(objRetval);
            }

            //--- Motivo de pedido
            //List<GenericBE> lstMotRec = new List<GenericBE>();
            lstMotPed.Add(objBlank);
            foreach (TVAUT ls_motped in lt_motped)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_motped.Augru;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_motped.Bezei;
                lstMotPed.Add(objRetval);
            }

            //--- Oficina de ventas
            //List<GenericBE> lstOfVtas = new List<GenericBE>();
            lstOfVtas.Add(objBlank);
            foreach (TVKBT ls_oficinas in lt_oficinas)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_oficinas.Vkbur;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_oficinas.Bezei;
                lstOfVtas.Add(objRetval);
            }
            
            //--- Sectores {Revisar si queda o se va}
            //List<GenericBE> lstSectores = new List<GenericBE>();
            foreach (TSPAT ls_sectores in lt_sectores)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_sectores.Spart;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_sectores.Vtext;
                lstSectores.Add(objRetval);
            }

            //--- Tipo / Clase de documento
            //List<GenericBE> lstTipoDoc = new List<GenericBE>();
            foreach (TVAKT ls_tipodoc in lt_tipodoc)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_tipodoc.Auart;
                objRetval.Descripcion = objRetval.Codigo + charSep + ls_tipodoc.Bezei;
                lstTipoDoc.Add(objRetval);
            }

            //---Tipo de visita
            //FALTA HACER QUE SE LLENE CON LOS VALORES DE LA FUNCION SAP
            objRetval = new GenericBE();
            objRetval.Codigo = "";
            objRetval.Descripcion = "";
            lstTipoVisita.Add(objRetval);

            foreach (ZWEB_COMBO item in lt_Tipovisita)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = item.Id_Elemento;
                objRetval.Descripcion = item.N_Elemento;
                lstTipoVisita.Add(objRetval);
            }           

        }

        #endregion

        #region IParametroDALC Members

        public int getDecimales()
        {
            return ParametroDALC.getDecimalesStatic;
        }

        public decimal getIGV()
        {
            return 18.00m;
        }

        public decimal getTipoCambio()
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

            string pFecha = dateNetToSap(DateTime.Now);
            decimal ex_tipoCambio = 0m;
            proxy.Zweb_Tipo_Cambio(pFecha, out ex_tipoCambio);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return ex_tipoCambio;
        }

        public List<GenericBE> getListaZipCode()
        {
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            ZTSD_ZIPCODESTable lt_zcodes = new ZTSD_ZIPCODESTable();
            p.Zweb_Lista_Zipcodes("", "", ref lt_zcodes);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            List<GenericBE> lstRetval = new List<GenericBE>();
            GenericBE objRetval = new GenericBE();
            objRetval.Codigo = string.Empty; objRetval.Descripcion = string.Empty;
            lstRetval.Add(objRetval);

            foreach (ZTSD_ZIPCODES ls_zcodes in lt_zcodes)
            {
                objRetval = new GenericBE();
                objRetval.Codigo = ls_zcodes.Zcode;
                objRetval.Descripcion = ls_zcodes.Zdesc;
                lstRetval.Add(objRetval);
            }
            return lstRetval;
        }

        public ClienteBE getClienteReniec(string pDNI)
        {
            ParametrosProxy p = new ParametrosProxy();
            p.Connection = DALC.getConnection;
            if (!p.Connection.IsOpen) { p.Connection.Open(); }

            ZTSD_CLIENTESTable lt_data = new ZTSD_CLIENTESTable();
            p.Zweb_Lee_Dni(pDNI, ref lt_data);

            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            ClienteBE objClienteBE = null;
            foreach (ZTSD_CLIENTES ls_data in lt_data)
            {
                objClienteBE = new ClienteBE();
                objClienteBE.Ciudad = ls_data.Ciudad;
                objClienteBE.CodigoPostal = ls_data.Zcode;
                objClienteBE.Descripcion = (ls_data.Nombre + ' ' + ls_data.Appat + ' ' + ls_data.Apmat).Trim();
                objClienteBE.Direccion = ls_data.Direc;
                objClienteBE.Eventual = true;
                objClienteBE.Ruc = ls_data.Codig;
                break;
            }
            return objClienteBE;
        }

        public decimal getTipoCambio(DateTime pFecha)
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

            string lvFecha = dateNetToSap(pFecha);
            decimal ex_tipoCambio = 0m;
            proxy.Zweb_Tipo_Cambio(lvFecha, out ex_tipoCambio);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return ex_tipoCambio;
        }

        /// <summary>
        /// Busca en el archivo de configuración el valor de un key
        /// </summary>
        /// <param name="key">Nombre de una entrada en el archivo de configuración</param>
        /// <returns>Valor asociado al key</returns>
        public string getParamValue(string key)
        {
            return getParamValueStatic(key);
        }

        /// <summary>
        /// Verifica que tipo de doc sea una oferta
        /// </summary>
        /// <param name="pCodTipoDoc">Tipo de documento.</param>
        /// <returns>Devuelve true si es oferta o false si no es oferta</returns>
        public bool esTipoOferta(string pCodTipoDoc)
        {
            return esOferta(pCodTipoDoc);
        }

        /// <summary>
        /// Verifica que tipo de doc sea algun tipo de servicio
        /// </summary>
        /// <param name="pCodTipoDoc">Tipo de documento.</param>
        /// <returns>Devuelve true si es un servicio o false si no es servicio</returns>
        public bool esTipoServicio(string pCodTipoDoc)
        {
            return esPedidoServicio(pCodTipoDoc);
        }

        /// <summary>
        /// Verifica que el tipo de posicion es  combo
        /// </summary>
        /// <param name="pCodTipoPos">Tipo de posición.</param>
        /// <returns>Devuelve true si es combo o false si no es combo</returns>
        public bool esTipoPosCombo(string pCodTipoPos)
        {
            return esTipoPosComboStatic(pCodTipoPos);
        }

        /// <summary>
        /// Verifica que el tipo de posicion es kit
        /// </summary>
        /// <param name="pCodTipoPos">Tipo de posición.</param>
        /// <returns>Devuelve true si es kit o false si no es kit</returns>        
        public bool esTipoPosKit(string pCodTipoPos)
        {
            return esTipoPosKitStatic(pCodTipoPos);
        }

        public bool esTipoCabCombo(string pCodTipoPos)
        {
            return esTipoCabComboStatic(pCodTipoPos);
        }
        public bool esTipoCabKit(string pCodTipoPos)
        {
            return esTipoCabKitStatic(pCodTipoPos);
        }
        public bool esTipoSinLote(string pCodTipoDoc)
        {
            return esTipoSinLoteStatic(pCodTipoDoc);
        }
  
        public bool esTipoXY(string pCodigo, string pConfigKey)
        {
            return esTipoX(pCodigo, pConfigKey);
        }

        #endregion



        public static int getDecimalesStatic
        {
            get { return Convert.ToInt16(getParamValueStatic("Decimales")); }
        }

        public static string getParamValueStatic(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        public static bool esOferta(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodOferta").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esPedidoServicio(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodServicios").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoCabComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoPosComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoPosCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoCabKitStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabKit").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoPosKitStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoPosKit").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static bool esTipoSinLoteStatic(string pCodTipoDoc)
        {
            string[] codTipoDoc = getParamValueStatic("CodSinLote").Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Verifica que sea un tipo determinado.
        /// </summary>
        /// <param name="pCodigo">Valor que se pide verificar.</param>
        /// <param name="pConfigKey">Llave que es buscada en el archivo de configuración.</param>
        /// <returns>Devuelve true o false </returns> 
        public static bool esTipoX(string pCod, string pConfigKey)
        {
            string[] codTipoDoc = getParamValueStatic(pConfigKey).Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCod == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static DateTime dateSapToNet(string pFechaSAP)
        {
            DateTime tmpVar = new DateTime();
            try
            {
                tmpVar = new DateTime(Convert.ToInt16(pFechaSAP.Substring(0, 4)), Convert.ToInt16(pFechaSAP.Substring(4, 2)), Convert.ToInt16(pFechaSAP.Substring(6, 2)));
            }
            catch { tmpVar = new DateTime(); }
            return tmpVar;
        }

        public static string dateNetToSap(DateTime pFechaNET)
        {
            try
            {
                return pFechaNET.Year.ToString().PadLeft(4, '0') + pFechaNET.Month.ToString().PadLeft(2, '0') + pFechaNET.Day.ToString().PadLeft(2, '0');
            }
            catch { return string.Empty; }
        }



        #region IParametroDALC Members


        public List<TipoDocumentoBE> getTipoDocumentos()
        {
            throw new NotImplementedException();
        }

        public List<GenericBE> getDocVtaCot()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
